"""
编写一个函数 fibonacci_even_generator，该函数接受一个位置参数 n 和一个关键字参数 total（默认值为5）。
函数应使用生成器推导式返回前 total 个斐波那契数列中的偶数，但不超过 n 个数字。

    例如：	result = list(fibonacci_even_generator(10, total=3))
            print(result) # 输出：[0, 2, 8]
"""


def fibonacci_even_generator(n, *, total=5):
    """
    生成斐波那契数列中的偶数

    Args:
        n: 斐波那契数的上限值
        total: 需要返回的偶数数量（默认为5）

    Returns:
        generator: 生成器对象，产生不超过n的斐波那契偶数
    """
    try:
        # 验证输入参数
        if not isinstance(n, int) or n < 1:
            raise ValueError("n必须是正整数")
        if not isinstance(total, int) or total < 1:
            raise ValueError("total必须是正整数")

        # 使用生成器推导式生成斐波那契偶数
        def fib_even():
            a, b = 0, 1
            while a <= n:
                if a % 2 == 0 and a != 0:  # 排除0
                    yield a
                a, b = b, a + b

        # 返回生成器对象，限制数量为total
        return (num for i, num in enumerate(fib_even()) if i < total)

    except Exception as e:
        print(f"错误: {str(e)}")
        return (x for x in [])  # 返回空生成器


def main():
    # 测试用例
    test_cases = [
        (100, 3),  # 基本测试：34以内的前3个偶数
        (10, 2),  # 小范围测试
        (1000, 5),  # 大范围测试
        (5, 4),  # 范围内数字不足
        (2, 1)  # 最小范围测试
    ]

    print("开始测试fibonacci_even_generator函数...")
    for n, total in test_cases:
        try:
            result = list(fibonacci_even_generator(n, total=total))
            print(f"\n输入: n={n}, total={total}")
            print(f"输出: {result}")

            # 验证结果
            if result:
                print(f"生成的数量: {len(result)}")
                print(f"全是偶数: {all(x % 2 == 0 for x in result)}")
                print(f"都不超过n: {all(x <= n for x in result)}")
        except Exception as e:
            print(f"测试出错: {str(e)}")


if __name__ == "__main__":
    main()